'use strict';

const Controller = require('egg').Controller;

class UserController extends Controller {
    // 查询用户列表
    async listAll() {
        let userList = await this.app.model.User.findAll();
        // 返回结果
        this.ctx.body = {
            msg: 'ok',
            data: userList
        }
    }

    // 查询用户列表
    async listPage() {
        // 查询条件
        let { sex } = this.ctx.request.body
        // 分页参数
        let { offset, limit } = this.ctx.query

        // where条件操作符对象
        let Op = this.app.Sequelize.Op
        let userList = await this.app.model.User.findAll({
            where: {
                sex,
                username: {
                    [Op.like]: '%小%'
                },
                id: {
                    [Op.gte]: 2
                },
            },
            // 限制返回哪些字段
            // attributes: ['id', 'username', 'sex'],
            attributes: {
                // 定义不返回的字段
                exclude: ['password']
            },
            order: [
                ['updated_at', 'DESC'],
                ['id', 'DESC']
            ],
            limit: parseInt(limit),
            offset: parseInt(offset)
        });
        // 返回结果
        this.ctx.body = {
            msg: 'ok',
            page: {
                limit,
                offset
            },
            data: userList
        }
    }

    // 查询用户列表
    async listAndCount() {
        let userList = await this.app.model.User.findAndCountAll();
        // 返回结果
        this.ctx.body = {
            msg: 'ok',
            data: userList
        }
    }

    // 查询单个用户
    async detail() {
        let uid = this.ctx.params.id;
        // 根据用户id从数据库查询用户信息
        let user = await this.app.model.User.findByPk(uid);
        // 返回结果
        this.ctx.body = {
            msg: 'ok',
            data: user
        }
    }

    // 根据条件查询单个用户
    async findOne() {
        let username = this.ctx.query.username;
        let user = await this.app.model.User.findOne({
            where: {
                // 根据用户名查询
                username
            }
        });
        // 返回结果
        this.ctx.body = {
            msg: 'ok',
            data: user
        }
    }

    // 添加用户
    async create() {
        console.log(this.ctx.request.body)
        const { username, password, sex } = this.ctx.request.body
        // 将单个用户信息添加到数据库
        let res = await this.app.model.User.create({
            username: username,
            password: password,
            sex: sex
        });
        // 返回结果
        this.ctx.body = {
            msg: 'ok',
            data: res
        }
    }

    // 批量添加用户
    async batchCreate() {
        // 将多个用户信息批量添加到数据库
        let res = await this.app.model.User.bulkCreate([{
            username: '用户4',
            password: '密码4',
            sex: '男'
        }, {
            username: '用户5',
            password: '密码5',
            sex: '男'
        }, {
            username: '用户6',
            password: '密码6',
            sex: '男'
        }])
        // 返回结果
        this.ctx.body = {
            msg: 'ok',
            data: res
        }
    }

    // 修改用户信息
    async update() {
        // 用户id
        let uid = this.ctx.params.id
        // 要修改的字段值
        let params = this.ctx.request.body

        // 根据id查询用户信息
        let user = await this.app.model.User.findByPk(uid);
        // 修改用户信息
        let res = await user.update(params, {
            // 允许哪些字段可以被更新
            fields: ['sex']
        });

        this.ctx.body = {
            msg: 'ok',
            data: res
        }
    }

    // 删除用户
    async delete() {
        let uid = parseInt(this.ctx.params.id);
        // 根据id查询用户
        let user = await this.app.model.User.findByPk(uid);
        if (!user) {
            return this.ctx.body = {
                msg: 'fail',
                data: '用户不存在'
            }
        }
        // 删除用户
        let res = await user.destroy();
        // let res = await this.app.model.User.destroy({
        //     where: {
        //         id: 1
        //     }
        // })
        this.ctx.body = {
            msg: 'ok',
            data: res
        }
    }
}

module.exports = UserController;
